Many application programs (“applications”) employ a client-server model in which clients interact with application servers executing server code of the application that provides services to clients. A client (e.g., a desktop computer, a tablet computer, or a smart phone) typically requests a service by sending a request via a communications network (e.g., the Internet) to the application server. The application server executes server code of the application that performs the requested service and provides a response to the client. A client may access the application server using either client code of the application or a program such as a web browser. With client code, the user interface is rendered by the client code as specified during development of the client code. In contrast, with a web browser the specification of the user interface is downloaded from the application server and rendered by the web browser.
There are both advantages and disadvantages of using either client code or a web browser. The client code can provide a user interface that is more sophisticated than what a web browser can provide in certain circumstances depending on the platforms and technologies that are utilized. The client code can implement more functionality due to having lower-level access to native functions on the client; depending on the platforms and technologies that are utilized. The client code can also use less communication bandwidth than a web browser because the specification of the user interface is downloaded once at installation of the client code. In contrast, the web browser generally needs to download the definition of a web page each time the web page is accessed. Client code, however, has a disadvantage in that any changes to the client code (including the user interface) need to be downloaded and installed on each client.
Application providers typically allow each entity (e.g., an organization, company, or customer) that uses their applications to customize to some degree their installation of the application. For example, if the application is a customer relationship management (“CRM”) system, then one entity may want the server to log all accesses to certain sensitive CRM data, while another entity may want the server to send a text message to a technical support team when certain error messages are encountered. If an application uses client code, an entity needs to create a customized version of the client code and then download and install the customized version on each client. The entity may also create a customized version of the server code. If an application provider provides a new version of the application, the entity may need to create new customized versions of the client code and server code if the current customized versions are not compatible with the new version or forego the enhancements provided by the new version. If the application uses a web browser, the entity needs to create customized versions of web pages or generate new web pages that are stored at the server. An entity may need to hire programmers to modify or create source code of the client code or to modify or create the web pages.
Some application providers may use a plug-in model to allow entities to customize client code or web pages of an application. With a plug-in model, an entity provides plug-in code that is either installed on the client when client code is used or downloaded from a server when a web browser is used. In either case, the entity may need to hire programmers to develop the plug-in code. The plug-in model, however, is typically not supported by applications whose client code is made available via an application store (or an application marketplace). An application store is a digital distribution platform that allows application providers to make the client code of their applications available for download to clients. For example, a CRM system provider may register the client code of the CRM system with the application store and allow users associated with entities (e.g., employees of the entities) who are its customers to download client code from the application store to the clients of the users. To download client code of an application to a client, a user associated with an entity accesses the application store with the client and downloads the client code to the client. To help ensure the integrity of the application store, an application store provider provides some level of quality control over the client code to ensure, for example, that the client code is not infected by malware, that it uses only approved services, and so on. To ensure the quality of the client code after being downloaded, application stores typically do not allow the client code to support plug-ins. If the client code did support plug-ins, the plug-in could be used to circumvent the quality control of the application store.